/*
* @Author: youngqj youngqj@126.com
* @Date: 2024-12-03 19:49:11
* @LastEditors: youngqj youngqj@126.com
* @LastEditTime: 2024-12-03 19:50:27
* @FilePath: /mallSystem/middleware/secure_headers_middleware.go
* @Description:使用安全标头保护网络应用程序免受常见安全漏洞的攻击非常重要。
应用程序中添加安全标头，以及如何避免与主机标头注入相关的攻击（SSRF、开放重定向）。
*
* Copyright © Zhejiang Xiaoqu Information Technology Co., Ltd, All Rights Reserved.
*/
package middleware

import (
	"github.com/gin-gonic/gin"
)

// SecureHeaders 是一个用于添加安全页眉的中间件
func SecureHeaders() gin.HandlerFunc {
	return func(c *gin.Context) {
		// XSS 保护：启用浏览器内置的 XSS 保护功能，并在检测到攻击时阻止页面渲染。
		c.Header("X-XSS-Protection", "1; mode=block")

		// 防止 MIME 类型嗅探：防止浏览器自动检测 MIME 类型。
		c.Header("X-Content-Type-Options", "nosniff")

		// 点击劫持保护：防止页面被嵌入到 iframe 中，以抵御点击劫持攻击。
		c.Header("X-Frame-Options", "DENY")

		// 内容安全策略：基本的 CSP，仅允许加载来自同一来源的资源。
		// 根据需要调整 `script-src`、`img-src` 等指令。
		c.Header("Content-Security-Policy", "default-src 'self'; script-src 'self'; img-src 'self' data:; style-src 'self'; object-src 'none';")

		// 严格传输安全 (HSTS)：强制所有通信使用 HTTPS。
		// 使用时需谨慎，确保已正确配置 HTTPS。
		c.Header("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload")

		// 引荐来源策略：控制 `Referer` 头部信息的发送。
		c.Header("Referrer-Policy", "no-referrer-when-downgrade")

		// 权限策略：控制浏览器中的功能和 API 的使用。
		c.Header("Permissions-Policy", "geolocation=(self), microphone=()")

		// 继续处理下一个处理器
		c.Next()
	}
}
